#include <noether_tpp/tool_path_planners/raster/raster_planner.h>  // 引入RasterPlanner头文件，该文件定义了RasterPlanner类
#include <noether_tpp/tool_path_modifiers/direction_of_travel_orientation_modifier.h>  // 引入用于修改方向的头文件

#include <utility>  // 引入C++标准库中的utility，用于std::move()等功能

#include <noether_tpp/tool_path_modifiers/raster_organization_modifier.h>  // 引入RasterOrganizationModifier，用于组织路径点
#include <noether_tpp/tool_path_modifiers/fixed_orientation_modifier.h>  // 引入FixedOrientationModifier，用于固定路径点的方向

namespace noether
{
// RasterPlanner类的定义
RasterPlanner::RasterPlanner(DirectionGenerator::ConstPtr dir_gen, OriginGenerator::ConstPtr origin_gen)
  // 构造函数，初始化RasterPlanner对象，传入两个常量指针：方向生成器（dir_gen）和起点生成器（origin_gen）
  : dir_gen_(std::move(dir_gen)), origin_gen_(std::move(origin_gen))
{
  // 使用std::move()将传入的参数移动到成员变量中，避免不必要的复制，提高性能
}

// plan方法用于生成规划路径
ToolPaths RasterPlanner::plan(const pcl::PolygonMesh& mesh) const
{
  // 调用planImpl()方法，该方法是RasterPlanner的核心，实现具体的路径规划算法
  ToolPaths tool_paths = planImpl(mesh);

  // 对生成的路径进行必要的修改，以确保生成“默认”行为
  // 首先，使用RasterOrganizationModifier修改路径点，使路径点按照栅格模式（Raster）组织
  RasterOrganizationModifier raster;
  tool_paths = raster.modify(tool_paths);

  // 其次，使用DirectionOfTravelOrientationModifier修改路径点的方向，使路径点的x轴与相邻路径点之间的行进方向对齐
  // 注意：此修改器不会改变路径点的z轴（与表面法线垂直）
  DirectionOfTravelOrientationModifier dot_orientation;
  tool_paths = dot_orientation.modify(tool_paths);

  // 返回修改后的路径点集合
  return tool_paths;
}

// 设置路径点之间的间距
void RasterPlanner::setPointSpacing(const double point_spacing) { point_spacing_ = point_spacing; }
// 设置路径线之间的间距
void RasterPlanner::setLineSpacing(const double line_spacing) { line_spacing_ = line_spacing; }
// 设置最小孔隙大小（用于规划路径时的孔隙处理）
void RasterPlanner::setMinHoleSize(const double min_hole_size) { min_hole_size_ = min_hole_size; };

}  // namespace noether